<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    


    <script>
        // var p = new Promise(function(){})
        // p 实例化后的对象  
        // Promise 实例对象 有 then 方法   then方法是定义在原型对象 (prototype)
        // p.then(callback1,callback2) 作用是为 Promise 实例添加状态改变时候的回调 
        // 当Promise 实例的状态 由 pedding(进行中) 改为 fulfilled(已成功) 则执行回调 callback1
        // 当Promise 实例的状态 由 pedding(进行中) 改为 rejected(已成功) 则执行回调  callback2

        // callback1  callback2 都是一个形式参数  p.then(success,failed)  接收Promise实例里面返回的数据
        // callback1 可接收 resolve 
        // callback2 错误回调  可接收 reject  以抛错的形式传递数据
        // callback2  接收 Promise 代码执行的语法错误  a = 100 ; key:key 
        
        // 总结 Promise 是异步编程  没有改变异步的本质  而是通过封装回调resolve reject  把代码给修改的更像同步函数
        
        
        // var p = new Promise(function(resolve,reject){
        //     setTimeout(()=>{
        //         var num = Math.random();
        //         // hellow 
        //         if(num > 0.5){
        //             resolve(true)  //callback1
        //         }else{
        //             reject(false)  //callback2
        //         } 
        //         console.log(p)
        //     },3000)
        // })
        
        // // then 同步写好  提前为 Promise实例添加状态改变时候的回调函数 提前决定了成功和失败回调的代码内容 最终还是要看 promise 返回的结果(resolve or reject)

        // // 如果成功了 我要干嘛 
        // // 如果失败了 我要干嘛

        // p.then(function(result){
        //     console.log("遵守承诺,准时下课", result)
        // },(error)=>{
        //     console.log("违背承诺--一直拖堂", error)
        // })



        // promise 有语法错误 会跳出 Promise 逻辑判断直接 进入 reject 失败回调 
        var p = new Promise(function(resolve,reject){

            helloyou   // 语法错误

            setTimeout(()=>{
                var num = Math.random();
                console.log(num)
                if(num > 0.5){
                    resolve(true)  //callback1
                }else{
                    reject(false)  //callback2
                } 
                console.log(p)
            },3000)
        })
        
        // then 同步写好  提前为 Promise实例添加状态改变时候的回调函数 提前决定了成功和失败回调的代码内容 最终还是要看 promise 返回的结果(resolve or reject)

        // 如果成功了 我要干嘛 
        // 如果失败了 我要干嘛

        p.then(function(result){
            console.log("遵守承诺,准时下课", result)
        },(error)=>{
            console.log("违背承诺--一直拖堂", error)
        })
        
    </script>
</body>
</html>